package com.xxyf.config.tomcat.sessionManager;

import org.apache.catalina.Context;
import org.apache.catalina.Host;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

/**
 * @Author 小小怡飞
 * @Date 2022/12/15 18:56
 * @Version JDK 8
 */
//@Component
    //extends TomcatServletWebServerFactory
    //据我观察 继承会导致自定义实现失效  所以使用bean 注入的方式
    @Configuration
public class TomcatServletWebServerFactorySelf {
//        安全实现
        @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> webServerFactoryWebServerFactoryCustomizer(){
            return factory -> factory.addContextCustomizers(context -> context.setManager(new NoSessionManager()));
        }
//    @Override
//    protected void postProcessContext(Context context) {
        // TODO 原理
//        Manager contextManager = null;
//        Manager manager = getManager();
//        if (manager == null) {
//            if (log.isDebugEnabled()) {
//                log.debug(sm.getString("standardContext.cluster.noManager",
//                        Boolean.valueOf((getCluster() != null)),
//                        Boolean.valueOf(distributable)));
//            }
//            if ((getCluster() != null) && distributable) {
//                try {
//                    contextManager = getCluster().createManager(getName());
//                } catch (Exception ex) {
//                    log.error(sm.getString("standardContext.cluster.managerError"), ex);
//                    ok = false;
//                }
//            } else {
//                contextManager = new StandardManager();
//            }
//        }
//
//        // Configure default manager if none was specified
//        if (contextManager != null) {
//            if (log.isDebugEnabled()) {
//                log.debug(sm.getString("standardContext.manager",
//                        contextManager.getClass().getName()));
//            }
//            setManager(contextManager);
//        }
    //TODO 具体实现
//        context.setManager(new NoSessionManager());
//    }
}
